home *** CD-ROM | disk | FTP | other *** search
- program SAVER;
-
- { © by QXC & VWP! All Rights Reserved! Siehe "Programmierung.Guide" und
- "Grammophon.eff.p" für weitere Copyright-Infos }
-
- Uses ExecIO;
-
- type Image=ptr;
- type Window=ptr;
- type Screen=ptr;
- type IntuiText=ptr;
-
- {$incl "libraries/dos.h","exec/memory.h"};
- {$path "WaveTracer/","RAM:include/";incl "WTIncl.mod","ModIncl.mod"}
-
- { WTIncl.mod - Alle wichtigen Strukturen und Konstanten
- ModIncl.mod - Alle für das Modulehandling erforderlichen Proceduren,
- Strukturen und variablendefinitionen }
-
-
- procedure SAVERAW;
-
- var SMemA,SMemL,Addr1,Addr8,l,m :long;
- var Data8 :^byte;
- var Data1 :^long;
- var ChBit,ChID :byte;
-
- begin
- with MyWTstdMsg^ do begin
- Flags:=0;
- SMemL:=PlayL24 div 4;
- SMemA:=AllocFastFirst(SMemL,MEMF_CLEAR);
- if SMemA=0 then begin
- SMemL:=AvailMem(MEMF_LARGEST);
- if SMemL>PlayL24 div 4 then SMemL:=PlayL24 div 4;
- SMemA:=AllocFastFirst(SMemL,MEMF_CLEAR);
- if SMemA=0 then begin
- Flags:=MDE_NO_MEMORY; { Nicht genug Speicher vorhanden,
- Fehlermeldung gibt der WaveTracer
- aus }
- exit;
- end;
- end;
- ChBit:=1;
- for ChID:=1 to 6 do begin
- if not (ActiveChannels and ChBit=0) then begin
- if MemA24[ChID]<>0 then begin
- l:=0; Addr1:=MemA24[ChID];
- repeat
- Addr8:=SMemA;
- repeat
- Data1:=ptr(Addr1); Addr1:=Addr1+4;
- Data8:=ptr(Addr8); Addr8:=Addr8+1;
- Data8^:=(Data1^ div 65536) + 127;
- until (Addr8>=SMemA+SMemL) or (Addr1>=MemA24[ChID]+PlayL24);
- m:=DosWrite(ActFHandle,ptr(SMemA),Addr8-SMemA);
- if m<Addr8-SMemA then begin
- FreeMem(SMemA,SMemL);
- Flags:=MDE_FILEERROR; { Datei-Fehler, Fehlermeldung wird
- vom WaveTracer abgegeben }
- exit;
- end;
- l:=l+m;
- until l>=PlayL24 div 4
- end;
- end;
- ChBit:=ChBit*2;
- end;
- FreeMem(SMemA,SMemL);
- Flags:=MDE_READY; { Alles OK }
- end;
- end;
-
-
- begin
- OpenLib(DosBase,'dos.library',0);
- if CREATEPORTS(PORT_SAVER) then begin { eigenen Port anlegen }
- with MyWTStdMsg^ do if Version=VERSION_SAVER then begin
- if (ActFHandle<>0) and (Flags=MDC_DOIT) then begin
- { einziges Kommando: Daten sollen gespeichert werden. Das FileHandle
- der bereits geöffneten Datei Findet sich in MyWTStdMsg^.ActFHandle;
- die Datei darf nicht mit DosClose() geschlossen werden! }
- SAVERAW;
- if Flags=MDE_READY then begin
- { Copyright-Infos ausgeben, wenn
- erfolgreich gespeichert wurde }
- Flags:=0;
- WTMsgPrc^:=MsgPrc(WTM_TASKREQ,'PC-/MacIntosh®-RAW 8 Bit Sample-Saver',COPYRIGHT,
- '','OK','',0,0,0,0,0,NIL);
- MESSAGEHANDLE;
- Flags:=MDE_READY;
- end;
- end else Flags:=MDE_ERROR; { unbekanntes Kommando vom
- WaveTracer }
- end else Flags:=MDE_WRONG_MODULEVERSION;
- { unbekannte Modulversion }
- MESSAGEHANDLE;
- RemPort(MyPort); { Erfolgsflag (MDE_..) abgeben und
- eigenen Port entfernen }
- end;
- CloseLib(DosBase);
- end.
-
-